컨벌루션 (Convolution)
컨벌루션(Convolution, 합성곱)은 두 개의 함수가 결합하여 제3의 함수를 생성하는 수학적 연산으로, 한 함수를 반전(Flip)시키고 이동(Shift)시키며 겹치는 영역의 적분 또는 합을 계산하는 과정이다.
1. 개요
컨벌루션은 [[신호처리]], 수학, 물리학, 그리고 현대의 딥러닝에 이르기까지 광범위하게 사용되는 연산이다. 기본적으로 입력 신호와 시스템의 특성을 나타내는 커널(Kernel, 필터)을 결합하여, 입력 신호가 시스템을 통과했을 때 어떤 결과가 나오는지를 계산하는 도구로 이해할 수 있다. 이는 단순히 두 값을 곱하는 것이 아니라, 한 함수를 반전시키고 이동시키며 다른 함수와 곱해 누적하는 과정을 거친다.
| 핵심 개념 |
설명 |
| 입력 함수 |
분석하거나 변형하고자 하는 원본 신호 또는 데이터 |
| 커널/필터 |
시스템의 특성이나 추출하고자 하는 특징을 담고 있는 작은 함수 |
| 결과물 |
입력 신호가 커널의 특성에 따라 변형된 새로운 함수 (출력 신호) |
2. 수학적 정의 및 원리
2.1 연속 시간 컨벌루션 (Continuous-time Convolution)
연속적인 신호 $f(t)$와 $g(t)$의 컨벌루션은 적분을 통해 정의되며, 기호로는 $*$를 사용한다.
$$ (f * g)(t) = \int_{-\infty}^{\infty} f(\tau) g(t - \tau) d\tau $$
2.2 이산 시간 컨벌루션 (Discrete-time Convolution)
디지털 신호처리에서 사용하는 이산 신호 $f[n]$과 $g[n]$의 컨벌루션은 합산(Summation)으로 정의된다.
$$ (f * g)[n] = \sum_{m=-\infty}^{\infty} f[m] g[n - m] $$
실제 디지털 시스템에서는 무한한 신호를 다룰 수 없으므로, 길이가 $N$과 $M$인 유한 길이 신호(Finite length signal)에 대해 $m=0$부터 $N-1$까지의 범위에서 합산을 수행하는 방식으로 계산한다.
2.3 연산 과정 (4단계)
컨벌루션 연산은 다음과 같은 물리적 단계를 거친다.
1. 반전 (Flip): 커널 함수 $g(\tau)$를 $y$축 기준으로 대칭 이동시켜 $g(-\tau)$로 만든다.
2. 이동 (Shift): 반전된 함수를 $t$만큼 평행 이동시켜 $g(t - \tau)$를 만든다.
3. 곱셈 (Multiply): 입력 함수 $f(\tau)$와 이동된 커널 $g(t - \tau)$의 겹치는 부분을 곱한다.
4. 누적 (Integrate/Sum): 곱한 결과값을 모든 영역에 대해 적분하거나 합산한다.
| 단계 |
동작 |
수학적 표현 |
목적 |
| 1 |
반전 |
$g(-\tau)$ |
시간축의 방향을 맞춤 |
| 2 |
이동 |
$g(t-\tau)$ |
시간의 흐름에 따른 변화 관찰 |
| 3 |
곱셈 |
$f(\tau) \cdot g(t-\tau)$ |
두 신호의 상관성 계산 |
| 4 |
누적 |
$\int \dots d\tau$ |
최종 출력값 산출 |
3. 신호처리에서의 활용
신호처리에서 컨벌루션은 [LTI 시스템]의 출력을 계산하는 핵심 원리이다. LTI 시스템이란 입력의 선형 결합이 출력의 선형 결합으로 나타나며, 입력 신호의 시간 이동이 출력 신호의 동일한 시간 이동으로 나타나는 시스템을 말한다.
시스템의 특성은 임펄스 응답(Impulse Response) $h(t)$로 정의된다. 임펄스 응답이란 매우 짧은 순간의 충격 신호([[Dirac delta function]])를 입력했을 때 시스템이 내놓는 반응이다. 임의의 입력 신호 $x(t)$가 이 시스템에 들어오면, 출력 $y(t)$는 다음과 같이 계산된다.
$$ y(t) = x(t) * h(t) $$
시간 영역 vs 주파수 영역 연산 비교
| 구분 |
시간 영역 (Time Domain) |
주파수 영역 (Frequency Domain) |
| 연산 방식 |
컨벌루션 (적분/합산) |
단순 곱셈 (Point-wise Multiplication) |
| 계산 복잡도 |
높음 ($O(N^2)$) |
낮음 ($O(N \log N)$ - [[FFT]] 이용 시) |
| 직관적 의미 |
신호의 시간적 중첩과 반응 |
특정 주파수 성분의 증폭 및 감쇄 |
4. 컨벌루션 정리 (Convolution Theorem)
컨벌루션 정리는 시간 영역에서의 복잡한 컨벌루션 연산이 [푸리에 변환]을 통해 주파수 영역으로 넘어가면 단순한 곱셈으로 변환된다는 정리이다.
- 정리: $\mathcal{F}\{f * g\} = \mathcal{F}\{f\} \cdot \mathcal{F}\{g\}$
- 의미: 두 신호를 컨벌루션한 결과의 푸리에 변환은, 각 신호를 개별적으로 푸리에 변환하여 곱한 것과 같다.
이 정리는 매우 중요한데, 실제 시스템 설계 시 시간 영역에서 직접 컨벌루션을 계산하는 대신, [FFT]를 통해 주파수 영역에서 곱셈을 수행한 뒤 다시 역변환(IFFT)하는 방식이 훨씬 효율적이기 때문이다.
| 영역 |
연산 |
변환 도구 |
| 시간 영역 $\rightarrow$ 주파수 영역 |
컨벌루션 $\rightarrow$ 곱셈 |
[[푸리에 변환]] (FT) |
| 주파수 영역 $\rightarrow$ 시간 영역 |
곱셈 $\rightarrow$ 컨벌루션 |
역 푸리에 변환 (IFT) |
5. 딥러닝과 CNN (Convolutional Neural Networks)
딥러닝의 CNN(합성곱 신경망)에서는 수학적 정의와 약간 다른 '교차 상관(Cross-correlation)' 연산을 사용하지만, 관례적으로 컨벌루션이라 부른다. 교차 상관은 커널을 반전시키지 않고 그대로 슬라이딩하며 연산하는 방식이다.
- 교차 상관 수식: $(f \star g)[n] = \sum_{m} f[m] g[n + m]$ (반전 과정 없음)
여기서는 필터(커널)가 이미지 위를 슬라이딩하며 국소적인 특징(에지, 질감 등)을 추출하여 특징 맵(Feature Map)을 생성한다.
주요 개념
- 스트라이드 (Stride): 필터를 한 번에 얼마나 이동시킬지를 결정하는 보폭.
- 패딩 (Padding): 입력 데이터의 외곽에 특정 값(보통 0)을 채워 출력 크기를 조절하고 외곽 정보 손실을 방지하는 기법.
PyTorch 구현 예시 (2D Convolution)
import torch
import torch.nn as nn
# 입력 데이터: (배치 크기, 채널, 높이, 너비) -> (1, 1, 5, 5)
input_data = torch.randn(1, 1, 5, 5)
# 3x3 크기의 필터 정의 (입력 채널 1, 출력 채널 1, 커널 크기 3x3)
conv_layer = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=3, stride=1, padding=0)
# 연산 수행
output = conv_layer(input_data)
print(f"Input shape: {input_data.shape}") # [1, 1, 5, 5]
print(f"Output shape: {output.shape}") # [1, 1, 3, 3]
| CNN 구성 요소 |
역할 |
비고 |
| 커널 (Kernel) |
특징 추출기 |
학습을 통해 가중치가 업데이트됨 |
| 특징 맵 (Feature Map) |
추출된 특징의 지도 |
다음 레이어의 입력이 됨 |
| 패딩 (Padding) |
크기 유지 및 경계 보존 |
Zero-padding이 일반적 |
6. 교차 상관 (Cross-correlation)과의 차이점
컨벌루션과 교차 상관은 연산 과정이 매우 유사하여 혼동하기 쉬우나, 결정적인 차이는 '반전(Flip)' 여부에 있다.
수식 비교
- 컨벌루션 (Convolution): $(f * g)[n] = \sum_{m} f[m] g[n - m]$ $\rightarrow$ 커널을 반전시켜 이동. 시스템의 응답(Response) 분석에 적합.
- 교차 상관 (Cross-correlation): $(f \star g)[n] = \sum_{m} f[m] g[n + m]$ $\rightarrow$ 커널을 그대로 이동. 두 신호의 유사도(Similarity) 측정에 적합.
1차원 신호 vs 2차원 이미지 연산 차이
- 1차원 (1D): 오디오, 시계열 데이터와 같은 선형 신호에서 사용. 커널이 시간축(X축)을 따라 좌우로 이동하며 스칼라 값의 합을 구한다.
- 2차원 (2D): 이미지와 같은 평면 데이터에서 사용. 커널(필터)이 상하좌우(X, Y축) 평면 방향으로 이동하며 행렬의 원소별 곱의 합을 구한다.
| 구분 |
1D 컨벌루션 |
2D 컨벌루션 |
| 대상 |
$\text{Signal} \times \text{Kernel}$ |
$\text{Image} \times \text{Filter}$ |
| 이동 방향 |
$\text{X축 (단방향)}$ |
$\text{X, Y축 (평면 방향)}$ |
| 결과 형태 |
1차원 벡터 (시퀀스) |
2차원 행렬 (이미지) |
7. 주요 응용 분야
| 분야 |
적용 사례 |
상세 설명 |
| 오디오 처리 |
리버브 (Reverb) |
특정 공간의 임펄스 응답을 녹음하여 입력 신호와 컨벌루션함으로써 공간감 재현 |
| 이미지 처리 |
블러링/샤프닝 |
가우시안 필터를 사용하여 주변 픽셀의 가중 평균을 구함으로써 이미지를 부드럽게(Blurring) 만들거나, 라플라시안 커널로 경계선을 강조 |
| 통신 시스템 |
필터링 (Filtering) |
저역 통과 필터(LPF) 등을 통해 특정 주파수 대역의 노이즈를 제거 |
| 컴퓨터 비전 |
객체 인식 |
CNN을 통해 이미지 내의 패턴을 인식하고 사물을 분류 |
# 컨벌루션 (Convolution)
컨벌루션(Convolution, 합성곱)은 두 개의 함수가 결합하여 제3의 함수를 생성하는 수학적 연산으로, 한 함수를 반전(Flip)시키고 이동(Shift)시키며 겹치는 영역의 적분 또는 합을 계산하는 과정이다.
---
## 1. 개요
컨벌루션은 [[신호처리]], 수학, 물리학, 그리고 현대의 딥러닝에 이르기까지 광범위하게 사용되는 연산이다. 기본적으로 입력 신호와 시스템의 특성을 나타내는 커널(Kernel, 필터)을 결합하여, 입력 신호가 시스템을 통과했을 때 어떤 결과가 나오는지를 계산하는 도구로 이해할 수 있다. 이는 단순히 두 값을 곱하는 것이 아니라, 한 함수를 반전시키고 이동시키며 다른 함수와 곱해 누적하는 과정을 거친다.
| 핵심 개념 | 설명 |
| :--- | :--- |
| **입력 함수** | 분석하거나 변형하고자 하는 원본 신호 또는 데이터 |
| **커널/필터** | 시스템의 특성이나 추출하고자 하는 특징을 담고 있는 작은 함수 |
| **결과물** | 입력 신호가 커널의 특성에 따라 변형된 새로운 함수 (출력 신호) |
---
## 2. 수학적 정의 및 원리
### 2.1 연속 시간 컨벌루션 (Continuous-time Convolution)
연속적인 신호 $f(t)$와 $g(t)$의 컨벌루션은 적분을 통해 정의되며, 기호로는 $*$를 사용한다.
$$ (f * g)(t) = \int_{-\infty}^{\infty} f(\tau) g(t - \tau) d\tau $$
### 2.2 이산 시간 컨벌루션 (Discrete-time Convolution)
디지털 신호처리에서 사용하는 이산 신호 $f[n]$과 $g[n]$의 컨벌루션은 합산(Summation)으로 정의된다.
$$ (f * g)[n] = \sum_{m=-\infty}^{\infty} f[m] g[n - m] $$
실제 디지털 시스템에서는 무한한 신호를 다룰 수 없으므로, 길이가 $N$과 $M$인 **유한 길이 신호(Finite length signal)**에 대해 $m=0$부터 $N-1$까지의 범위에서 합산을 수행하는 방식으로 계산한다.
### 2.3 연산 과정 (4단계)
컨벌루션 연산은 다음과 같은 물리적 단계를 거친다.
1. **반전 (Flip):** 커널 함수 $g(\tau)$를 $y$축 기준으로 대칭 이동시켜 $g(-\tau)$로 만든다.
2. **이동 (Shift):** 반전된 함수를 $t$만큼 평행 이동시켜 $g(t - \tau)$를 만든다.
3. **곱셈 (Multiply):** 입력 함수 $f(\tau)$와 이동된 커널 $g(t - \tau)$의 겹치는 부분을 곱한다.
4. **누적 (Integrate/Sum):** 곱한 결과값을 모든 영역에 대해 적분하거나 합산한다.
| 단계 | 동작 | 수학적 표현 | 목적 |
| :--- | :--- | :--- | :--- |
| 1 | 반전 | $g(-\tau)$ | 시간축의 방향을 맞춤 |
| 2 | 이동 | $g(t-\tau)$ | 시간의 흐름에 따른 변화 관찰 |
| 3 | 곱셈 | $f(\tau) \cdot g(t-\tau)$ | 두 신호의 상관성 계산 |
| 4 | 누적 | $\int \dots d\tau$ | 최종 출력값 산출 |
---
## 3. 신호처리에서의 활용
신호처리에서 컨벌루션은 **[[LTI 시스템]](Linear Time-Invariant, 선형 시불변 시스템)**의 출력을 계산하는 핵심 원리이다. LTI 시스템이란 입력의 선형 결합이 출력의 선형 결합으로 나타나며, 입력 신호의 시간 이동이 출력 신호의 동일한 시간 이동으로 나타나는 시스템을 말한다.
시스템의 특성은 **임펄스 응답(Impulse Response)** $h(t)$로 정의된다. 임펄스 응답이란 매우 짧은 순간의 충격 신호([[Dirac delta function]])를 입력했을 때 시스템이 내놓는 반응이다. 임의의 입력 신호 $x(t)$가 이 시스템에 들어오면, 출력 $y(t)$는 다음과 같이 계산된다.
$$ y(t) = x(t) * h(t) $$
### 시간 영역 vs 주파수 영역 연산 비교
| 구분 | 시간 영역 (Time Domain) | 주파수 영역 (Frequency Domain) |
| :--- | :--- | :--- |
| **연산 방식** | 컨벌루션 (적분/합산) | 단순 곱셈 (Point-wise Multiplication) |
| **계산 복잡도** | 높음 ($O(N^2)$) | 낮음 ($O(N \log N)$ - [[FFT]] 이용 시) |
| **직관적 의미** | 신호의 시간적 중첩과 반응 | 특정 주파수 성분의 증폭 및 감쇄 |
---
## 4. 컨벌루션 정리 (Convolution Theorem)
컨벌루션 정리는 시간 영역에서의 복잡한 컨벌루션 연산이 **[[푸리에 변환]](Fourier Transform)**을 통해 주파수 영역으로 넘어가면 단순한 곱셈으로 변환된다는 정리이다.
- **정리:** $\mathcal{F}\{f * g\} = \mathcal{F}\{f\} \cdot \mathcal{F}\{g\}$
- **의미:** 두 신호를 컨벌루션한 결과의 푸리에 변환은, 각 신호를 개별적으로 푸리에 변환하여 곱한 것과 같다.
이 정리는 매우 중요한데, 실제 시스템 설계 시 시간 영역에서 직접 컨벌루션을 계산하는 대신, [[FFT]](고속 푸리에 변환)를 통해 주파수 영역에서 곱셈을 수행한 뒤 다시 역변환(IFFT)하는 방식이 훨씬 효율적이기 때문이다.
| 영역 | 연산 | 변환 도구 |
| :--- | :--- | :--- |
| 시간 영역 $\rightarrow$ 주파수 영역 | 컨벌루션 $\rightarrow$ 곱셈 | [[푸리에 변환]] (FT) |
| 주파수 영역 $\rightarrow$ 시간 영역 | 곱셈 $\rightarrow$ 컨벌루션 | 역 푸리에 변환 (IFT) |
---
## 5. 딥러닝과 CNN (Convolutional Neural Networks)
딥러닝의 **CNN(합성곱 신경망)**에서는 수학적 정의와 약간 다른 **'교차 상관(Cross-correlation)'** 연산을 사용하지만, 관례적으로 컨벌루션이라 부른다. 교차 상관은 커널을 반전시키지 않고 그대로 슬라이딩하며 연산하는 방식이다.
- **교차 상관 수식:** $(f \star g)[n] = \sum_{m} f[m] g[n + m]$ (반전 과정 없음)
여기서는 필터(커널)가 이미지 위를 슬라이딩하며 국소적인 특징(에지, 질감 등)을 추출하여 **특징 맵(Feature Map)**을 생성한다.
### 주요 개념
- **스트라이드 (Stride):** 필터를 한 번에 얼마나 이동시킬지를 결정하는 보폭.
- **패딩 (Padding):** 입력 데이터의 외곽에 특정 값(보통 0)을 채워 출력 크기를 조절하고 외곽 정보 손실을 방지하는 기법.
### PyTorch 구현 예시 (2D Convolution)
```python
import torch
import torch.nn as nn
# 입력 데이터: (배치 크기, 채널, 높이, 너비) -> (1, 1, 5, 5)
input_data = torch.randn(1, 1, 5, 5)
# 3x3 크기의 필터 정의 (입력 채널 1, 출력 채널 1, 커널 크기 3x3)
conv_layer = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=3, stride=1, padding=0)
# 연산 수행
output = conv_layer(input_data)
print(f"Input shape: {input_data.shape}") # [1, 1, 5, 5]
print(f"Output shape: {output.shape}") # [1, 1, 3, 3]
```
| CNN 구성 요소 | 역할 | 비고 |
| :--- | :--- | :--- |
| **커널 (Kernel)** | 특징 추출기 | 학습을 통해 가중치가 업데이트됨 |
| **특징 맵 (Feature Map)** | 추출된 특징의 지도 | 다음 레이어의 입력이 됨 |
| **패딩 (Padding)** | 크기 유지 및 경계 보존 | Zero-padding이 일반적 |
---
## 6. 교차 상관 (Cross-correlation)과의 차이점
컨벌루션과 교차 상관은 연산 과정이 매우 유사하여 혼동하기 쉬우나, 결정적인 차이는 **'반전(Flip)'** 여부에 있다.
### 수식 비교
- **컨벌루션 (Convolution):** $(f * g)[n] = \sum_{m} f[m] g[n - m]$ $\rightarrow$ 커널을 **반전**시켜 이동. 시스템의 응답(Response) 분석에 적합.
- **교차 상관 (Cross-correlation):** $(f \star g)[n] = \sum_{m} f[m] g[n + m]$ $\rightarrow$ 커널을 **그대로** 이동. 두 신호의 유사도(Similarity) 측정에 적합.
### 1차원 신호 vs 2차원 이미지 연산 차이
- **1차원 (1D):** 오디오, 시계열 데이터와 같은 선형 신호에서 사용. 커널이 시간축(X축)을 따라 좌우로 이동하며 스칼라 값의 합을 구한다.
- **2차원 (2D):** 이미지와 같은 평면 데이터에서 사용. 커널(필터)이 상하좌우(X, Y축) 평면 방향으로 이동하며 행렬의 원소별 곱의 합을 구한다.
| 구분 | 1D 컨벌루션 | 2D 컨벌루션 |
| :--- | :--- | :--- |
| **대상** | $\text{Signal} \times \text{Kernel}$ | $\text{Image} \times \text{Filter}$ |
| **이동 방향** | $\text{X축 (단방향)}$ | $\text{X, Y축 (평면 방향)}$ |
| **결과 형태** | 1차원 벡터 (시퀀스) | 2차원 행렬 (이미지) |
---
## 7. 주요 응용 분야
| 분야 | 적용 사례 | 상세 설명 |
| :--- | :--- | :--- |
| **오디오 처리** | 리버브 (Reverb) | 특정 공간의 임펄스 응답을 녹음하여 입력 신호와 컨벌루션함으로써 공간감 재현 |
| **이미지 처리** | 블러링/샤프닝 | **가우시안 필터**를 사용하여 주변 픽셀의 가중 평균을 구함으로써 이미지를 부드럽게(Blurring) 만들거나, 라플라시안 커널로 경계선을 강조 |
| **통신 시스템** | 필터링 (Filtering) | 저역 통과 필터(LPF) 등을 통해 특정 주파수 대역의 노이즈를 제거 |
| **컴퓨터 비전** | 객체 인식 | CNN을 통해 이미지 내의 패턴을 인식하고 사물을 분류 |